package com.fingard.constant;

import java.math.BigDecimal;
import java.text.DecimalFormat;

public class DecimalFormat2 {

    private String formatStr;

    public DecimalFormat2(String p_formatStr) {
        formatStr = p_formatStr;
    }

    public String format(double p_number) {
        return new DecimalFormat(formatStr).format(p_number);
    }

    public String format(String p_number) {
        return new DecimalFormat(formatStr).format(p_number);
    }

    public String format(BigDecimal p_number) {
        return new DecimalFormat(formatStr).format(p_number);
    }

    /**
     * 将小写金额转换为大写
     *
     * @param v
     * @return
     * @throws Exception
     */
    public static String change2CNMoneyUnit(double v) throws Exception {
        final String UNIT = "万仟佰拾亿仟佰拾万仟佰拾元角分";
        final String DIGIT = "零壹贰叁肆伍陆柒捌玖";
        final double MAX_VALUE = 99999999999.99D;
        boolean isnegtive = false;
        if (v < 0) {//负数
            v = Math.abs(v);
            isnegtive = true;
        }
        if (v > MAX_VALUE) {
            throw new Exception("金额" + v + "超出最大支持长度：");
        }
        long l = Math.round(v * 100);
        if (l == 0) {
            return "零元整";
        }
        String strValue = l + "";
        // i用来控制数
        int i = 0;
        // j用来控制单位
        int j = UNIT.length() - strValue.length();
        String rs = "";
        boolean isZero = false;
        for (; i < strValue.length(); i++, j++) {
            char ch = strValue.charAt(i);
            if (ch == '0') {
                isZero = true;
                if (UNIT.charAt(j) == '亿' || UNIT.charAt(j) == '万' || UNIT.charAt(j) == '元') {
                    rs = rs + UNIT.charAt(j);
                    isZero = false;
                }
            } else {
                if (isZero) {
                    rs = rs + "零";
                    isZero = false;
                }
                rs = rs + DIGIT.charAt(ch - '0') + UNIT.charAt(j);
            }
        }
        if (!rs.endsWith("分")) {
            rs = rs + "整";
        }
        rs = rs.replaceAll("亿万", "亿");
        if (isnegtive) {
            return "负数" + rs;
        }
        return rs;
    }
}
